package command;

import beans.FluxBean;
import beans.ListeFlux;
import beans.ListeTagFlux;
import beans.TagFluxBean;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.*;

/**
 * @author Antonin Mozzati
 * @author Yannick Schürter
 */
public class AddFluxCommand implements Command {

    @Override
    public String getCommandName() {
	return "addFluxCommand";
    }

    @Override
    public ActionFlow actionPerform(HttpServletRequest request) {
	String vue = "addFlux";
	String erreur = "erreur";
	String index = "index";

	System.out.println(this.getCommandName());

	// Récupération de l'ID en session nécessaire à la création du flux
	HttpSession session = request.getSession(false);
	int sessionID;
	if (session.getAttribute("sessionID") != null) {
	    sessionID = (Integer) session.getAttribute("sessionID");
	} else {
	    // Si l'ID n'est pas dans la session, on redirige vers la page d'accueil
	    return new ActionFlow(index, index + ".jsp", false);
	}


	// Redirection avant traitement si le formulaire n'a pas été soumis
	if (request.getParameter("addFluxSubmit") == null) {
	    return new ActionFlow(vue, vue + ".jsp", false);
	}

	ListeFlux listeFlux;
	ListeTagFlux listeTagFlux;
	try {
	    // On récupère la liste de flux du ServletContext
	    listeFlux = (ListeFlux) request.getServletContext().getAttribute("listeFlux");
	    // On récupère la liste de tags du ServletContext
	    listeTagFlux = (ListeTagFlux) request.getServletContext().getAttribute("listeTagFlux");
	} catch (Exception ex) {
	    Logger.getLogger(AddFluxCommand.class.getName()).log(Level.SEVERE, null, ex);
	    return new ActionFlow(erreur, erreur + ".html", true);
	}

	String titre = request.getParameter("titre");
	String description = request.getParameter("description");
	String[] tags = request.getParameter("tags").split(";");

	// si les formulaires ne sont pas remplis
	if (titre.equals("")) {
	    request.setAttribute("erreur", "Erreur : le flux doit avoir un titre.");
	} else {
	    if (description.equals("")) {
		description = "Pas de description";
	    }
	    FluxBean fb = new FluxBean(0, sessionID, 0, titre, description);
	    int idFlux = listeFlux.addFlux(fb);
	    fb.setId_flux(idFlux);
	    for (String tag : tags) {
		if ((tag != null) && (!tag.equals(""))) {
		    listeTagFlux.addTagFlux(new TagFluxBean(0, tag), fb);
		}
	    }
	}
	return new ActionFlow(vue, vue + ".jsp", false);
    }
}
